package com.yxw.blog.service;

import com.yxw.blog.bean.entity.User;
import com.yxw.blog.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpSession;
import java.io.*;
import java.text.ParseException;
import java.util.HashMap;
import java.util.Map;

/**
 * @author yexinwei
 */
@Service
public class InformationService {

    @Autowired
    UserDao userDao;

    public Map<String,Object> showInfo(HttpSession session) throws IOException {
        //通过session获得userId
        Integer userId = (Integer)session.getAttribute("userId");
        //通过userId获得User对象
        User user = userDao.getUserById(userId);
        //将信息放入Map中并返回
        Map<String,Object> map = new HashMap<>();
        map.put("display_name",user.getUserDisplayName());
        map.put("birthday",user.getUserBirthday());
        map.put("email",user.getUserEmail());
        map.put("location",user.getUserLocation());
        map.put("sex",user.getUserSex());
        //获取到头像url
        String portraitUrl = user.getUserPortrait();
        //获取到头像的名称
        String name = portraitUrl.substring(portraitUrl.lastIndexOf("\\")+1,portraitUrl.length());
        //项目中缓存头像的url
        String headUrl = System.getProperty("user.dir")+"\\src\\main\\resources\\static\\img\\head\\"+name;
        //指定要读取的图片
        File originalFile = new File(portraitUrl);
        //创建要写入的图片文件（在static\img\head\中放入头像）
        File newFile = new File(headUrl);
        //校验该文件是否已存在
        if (newFile.exists()) {
            //删除对应的文件，从磁盘中删除
            newFile.delete();
            //只是创建了一个File对象，并没有在磁盘下创建文件
            newFile = new File(headUrl);
        }
        //如果文件不存在
        if (!newFile.exists()) {
            //会在磁盘下创建文件，但此时大小为0K
            newFile.createNewFile();
        }
        //输入流，指定要写出的图片
        FileInputStream in = new FileInputStream(originalFile);
        // 输出流，指定要写入的图片
        FileOutputStream out = new FileOutputStream(newFile);
        // 每次读取的字节长度
        int n = 0;
        // 存储每次读取的内容
        byte[] bb = new byte[1024];
        while ((n = in.read(bb)) != -1) {
            // 将读取的内容，写入到输出流当中
            out.write(bb, 0, n);
        }
        //执行完以上后，磁盘下的该文件才完整，大小是实际大小
        // 关闭输入输出流
        out.close();
        in.close();

        //前端访问头像的地址
        String head = "/img/head/"+name;
        map.put("head",head);
        return map;
    }

    public void updateInfo(String display_name, String birthday , String email, String location, String sex, String imageUrl, HttpSession session ) throws ParseException {
        //通过session获得userId
        Integer userId = (Integer)session.getAttribute("userId");
        Integer res=0;
        //如果没有改头像信息则执行
        if(imageUrl==""){
            res = userDao.updateUserExceptImageUrl(display_name,birthday,email,location,sex,userId);
        }else{
            res = userDao.updateUser(display_name,birthday,email,location,sex,imageUrl,userId);
        }
        if(res!=1){
            System.out.println("更新信息失败");
        }
    }
}
